Joachim Breitner's Homepage
A different Maybe maybe
This is a post about the implementation of data types in the programming language Haskell. If you haven’t heard about that, you can proabably safely skip it.
For a while I have been thinking: Isn’t there a way to get rid of the intermediate Maybe
construct in a common expression like fromMaybe default . lookup.
It seems that a way to do that would be to pass more information to the Maybe
-generating function: What to do with a Just
-Value, and what to return in case of Nothing
. This leads to a new definion of the Maybe
data type as a function. Later I discovered that this seems to work for any algebraic data type.
This is probably nothing new, but I was offline at the time of writing, so I didn’t check. This means that this might also be total rubbish. Enjoy.
- “Algebraic Data Type Done Differently” (PDF-File)
- “Algebraic Data Type Done Differently” (Literate Haskell Source / LaTeX Source)
Update: Several responses in the “haskell-cafe”-list told me that I just re-invented Curch-Encoding. Nice :-)
Comments
Probably a more fruitful way to optimize Maybe (and one that I would hope the compiler already does!) is to use pointer tagging-type tricks. You might be familiar with this already -- essentially, you use the fact that all pointers on a 32-bit architecture have the last two bits set to zero. So, if you set (say) the low bit of a possibly-pointer value to 1, that means that it's something other than a pointer. You can use this to give common constants like [] and Nothing a unique encoding.
Have something to say? You can post a comment by sending an e-Mail to me at <mail@joachim-breitner.de>, and I will include it here.